conda 環境で特定ディレクトリ配下に移動すると自動的に仮想環境をアクティベートする方法
Biconda のために conda をインストールして利用しています。conda 環境の仮想作業で作業しているとリモート接続の都度仮想環境のアクティベートに手間を感じるようになりました。
Bash で作業効率を良くするために試してみて良かった conda の設定内容を紹介します。
実行環境
OS は Ubuntu 22.04 LTS です。Bash 環境を想定しています。
$ conda -V conda 23.1.0
base 環境自動アクティベートの停止
conda をインストールするとbase
環境が自動的アクティベートされた状態になります。プロンプトの前方に(base)
と表示されている状態のことです。
(base) ubuntu@ip-10-0-1-249:
任意作成した仮想環境ではなく誤ってbase
環境で conda install することがままよくあります。とくに SSH やセッションマネージャーで再接続した後にです。今後も事故りそうなのでbase
環境が自動的にアクティベートするのをやめたくなりました。
設定手順
一度conda deactivate
してから自動アクティベートを停止する設定を入れるだけです。
conda deactivate conda config --set auto_activate_base false
リモート接続を再接続後はデフォルトの conda 環境であるbase
がアクティベートされません。任意の仮想環境をアクティベート(conda activate hoge
)しないと!と気がつけます。
特定ディレクトリ配下で自動アクティベート
任意の仮想環境を都度アクティベート(conda activate hoge
)するのが手間に感じました。conda でも direnv 的なことを実現したくなりました。
特定のディレクトリ配下へ移動(cd
)したら任意の仮想環境(conda activate hoge
)を自動実行を実現していた先人の記事がありました。参考により細かい手順を残しておきます。
設定手順
任意の仮想環境へ切り替え用の任意の名前のディレクトリを作成します。
mkdir ~/bioconda cd ~/bioconda
仮想環境名はbioconda
と名付けて新規作成後、アクティベートします。既存の仮想環境を利用される場合はアクティベートだけ実行してください。
conda create -n bioconda conda activate bioconda
アクティベートした仮想環境の設定情報をエクスポートします。設定情報が必要というよりは仮想環境名(今回だとbioconda
)をテキストに書き出すにあたり手軽でかつ正確に仮想環境名をテキストへ書き出す方法として採用しています。
conda env export > environment.yaml
.bash_profile
に設定を追加します。ファイルがなければ新規作成すれば良いです。
vi ~/.bash_profile
# Auto activate conda environments function conda_auto_env() { if [ -e "environment.yaml" ]; then ENV_NAME=$(head -n 1 environment.yaml | cut -f2 -d ' ') # Check if you are already in the environment if [[ $CONDA_PREFIX != *$ENV_NAME* ]]; then # Try to activate environment source activate $ENV_NAME &>/dev/null fi fi } export PROMPT_COMMAND="conda_auto_env;$PROMPT_COMMAND"
編集した.bash_profile
内容を反映させます。
source ~/.bash_profile
設定は以上です。
動作確認
一度conda deactivate
してから作成したディレクトリ(~/bioconda
)から移動します。
conda deactivate cd ~
作成したディレクトリへ移動すると自動的に指定した conda 環境がアクティベートされたら成功です。プロンプトの前方に指定した仮想環境名((bioconda)
)と表示されている状態のことです。
$ cd ~/bioconda (bioconda) ubuntu@ip-10-0-1-249:~/bioconda$
おわりに
地味な設定ですが手間が減って使いやすくなりました。なったのは良いのですが、、、最終的に fish に乗り換えたほうが作業効率が良かったのでBash を使わないといけない状況に備えて必要だった設定を書き残しました。良き conda ライフを!